package com.wang.springbootinit.controller;

import com.wang.springbootinit.common.BaseResponse;
import com.wang.springbootinit.common.ErrorCode;
import com.wang.springbootinit.common.ResultUtils;
import com.wang.springbootinit.model.entity.Feedback;
import com.wang.springbootinit.service.FeedbackService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 信息反馈接口
 * 提供反馈相关的HTTP接口，包括提交反馈、查询反馈等功能
 *
 * @author wang
 */
@RestController
@RequestMapping("/feedback")
public class FeedbackController {
    
    @Resource
    private FeedbackService feedbackService;
    
    /**
     * 提交反馈
     * 学生提交新的反馈信息
     *
     * @param feedback 反馈信息，包含类型和内容
     * @param request HTTP请求对象
     * @return 新创建的反馈ID
     */
    @PostMapping("/submit")
    public BaseResponse<Long> submitFeedback(@RequestBody Feedback feedback, HttpServletRequest request) {
        if (feedback == null) {
            return ResultUtils.error(ErrorCode.PARAMS_ERROR);
        }
        Long feedbackId = feedbackService.submitFeedback(feedback, request);
        return ResultUtils.success(feedbackId);
    }
    
    /**
     * 获取反馈详情
     * 根据反馈ID查询单条反馈的详细信息
     *
     * @param id 反馈ID
     * @return 反馈详细信息
     */
    @GetMapping("/get")
    public BaseResponse<Feedback> getFeedback(@RequestParam Long id) {
        if (id <= 0) {
            return ResultUtils.error(ErrorCode.PARAMS_ERROR);
        }
        Feedback feedback = feedbackService.getFeedbackById(id);
        return ResultUtils.success(feedback);
    }
    
    /**
     * 获取学生的反馈列表
     * 查询指定学生的所有反馈记录
     *
     * @param request
     * @return 反馈列表
     */
    @GetMapping("/list/student")
    public BaseResponse<List<Feedback>> getStudentFeedbacks(HttpServletRequest request) {
        List<Feedback> feedbacks = feedbackService.getStudentFeedbacks(request);
        return ResultUtils.success(feedbacks);
    }
    
    /**
     * 处理反馈
     * 管理员处理学生的反馈信息
     *
     * @param feedback 包含处理结果的反馈信息
     * @return 是否处理成功
     */
    @PostMapping("/handle")
    public BaseResponse<Boolean> handleFeedback(@RequestBody Feedback feedback) {
        if (feedback == null || feedback.getId() == null) {
            return ResultUtils.error(ErrorCode.PARAMS_ERROR);
        }
        boolean result = feedbackService.handleFeedback(feedback);
        return ResultUtils.success(result);
    }
} 